package com.cloud.easy.im.container;

import com.cloud.easy.im.event.ServerEventListener;
import io.netty.channel.Channel;
import org.checkerframework.checker.units.qual.K;

import java.util.List;
import java.util.concurrent.ConcurrentMap;

/**
 * 存储在线列表实现接口
 * <p>
 * 你可以通过构造函数，设置根据业务需要的在线容器存储
 * 也可以通过重写get(),put()和 contationsKey()，方便后续使用外部中间件
 *
 * @author wangjian
 * @version 0.1.0
 * @create 2020年09月07日2:14 下午
 */
public interface OnlineMap {
    /**
     * 根据产品获取所有连接
     * @param productCode 产品Code
     * @return key=userId ,value=channel  Map
     */
    ConcurrentMap<String, Channel> get(Integer productCode);

    /**
     * 根据用户ID和产品Code获取用户具体连接
     * @param key 用户ID
     * @param productCode 产品Code
     * @return 返回一个连接
     */
    Channel get(String key, Integer productCode);

    /**
     *
     * @param key
     * @param value
     */
    void put(String key, Channel value);
    void check ();
    /**
     * 添加连接到对应的产品容器
     * @param key 用户ID
     * @param value 连接
     * @param productCode 产品Code
     */
    void put(Integer productCode, String userId, Channel value);

    /**
     * 判断容器里面是否有该连接
     * @param key 用户ID
     * @param productCode 产品Code
     * @return true : 存在 | false: 不存在
     */
    boolean containsKey(String key,Integer productCode);

    /**
     * 获取在线用户数量
     * @return 返回在线人数
     */
    long size();

    /**
     * 删除某个连接
     * @param key 用户ID
     * @param productCode 产品Code
     */
    void remove(String key,Integer productCode);

    /**
     * 设置监听器
     * @param serverEventListener 监听器
     */
    void setServerEventListener(ServerEventListener serverEventListener);
}
